---
displayed_sidebar: "Chinese"
---

# array_contains_all

## 功能

检查数组`arr1`是否包含数组`arr2`中的所有元素，即`arr2`是否为`arr1`的子集。是的话返回`1`，否则返回`0`。

该函数从 2.4 版本开始支持。

## 语法

```Haskell
BOOLEAN array_contains_all(arr1, arr2)
```

## 参数说明

`arr`: 用来比较的两个数组。上述语法检查`arr2`是否为`arr1`的子集。

`arr1`和`arr2`内元素的数据类型必须一致。关于 StarRocks 支持的数组元素数据类型，请参见[ARRAY](../../sql-statements/data-types/Array.md)。

## 返回值说明

返回 BOOLEAN 类型的值。

如果`arr2`是`arr1`的子集，则返回`1`。否则，返回`0`。

如果`arr1`或`arr2`为NULL，则返回NULL。

## 使用说明

- 如果数组元素包含`null`，系统会按照正常值处理。

- 空数组默认为所有数组的子集。

- 两个数组中的元素顺序无需保持一致。

## 示例

1. 创建表`t1`，并向表中插入数据。

    ```SQL
    CREATE TABLE t1 (
        c0 INT,
        c1 ARRAY<INT>,
        c2 ARRAY<INT>
    ) ENGINE=OLAP
    DUPLICATE KEY(c0)
    DISTRIBUTED BY HASH(c0);

    INSERT INTO t1 VALUES
        (1,[1,2,3],[1,2]),
        (2,[1,2,3],[1,4]),
        (3,NULL,[1]),
        (4,[1,2,null],NULL),
        (5,[1,2,null],[null]),
        (6,[2,3],[]);
    ```

2. 查询表中数据。

    ```Plain
    SELECT * FROM t1 ORDER BY c0;
    +------+------------+----------+
    | c0   | c1         | c2       |
    +------+------------+----------+
    |    1 | [1,2,3]    | [1,2]    |
    |    2 | [1,2,3]    | [1,4]    |
    |    3 | NULL       | [1]      |
    |    4 | [1,2,null] | NULL     |
    |    5 | [1,2,null] | [null]   |
    |    6 | [2,3]      | []       |
    +------+------------+----------+
    ```

3. 检查`c2`的每行数据是否为`c1`的子集。

    ```Plaintext
    SELECT c0, c1, c2, array_contains_all(c1, c2) FROM t1 ORDER BY c0;
    +------+------------+----------+----------------------------+
    | c0   | c1         | c2       | array_contains_all(c1, c2) |
    +------+------------+----------+----------------------------+
    |    1 | [1,2,3]    | [1,2]    |                          1 |
    |    2 | [1,2,3]    | [1,4]    |                          0 |
    |    3 | NULL       | [1]      |                       NULL |
    |    4 | [1,2,null] | NULL     |                       NULL |
    |    5 | [1,2,null] | [null]   |                          1 |
    |    6 | [2,3]      | []       |                          1 |
    +------+------------+----------+----------------------------+
    ```

    在返回结果中：

    `c0`为1时，`c2`为`c1`的子集，返回1；

    `c0`为2时，`c2`不是`c1`的子集，返回0；

    `c0`为3时，`c``1`为NULL，`c0`为4时，`c2`为NULL，故均返回NULL；

    `c0`为5时，两个数组包含数组元素`null`，系统会按照正常值处理，返回`1`；

    `c0`为6时，`c2`为空数组，默认为所有数组的子集，返回`1`。
